package cn.edu.lingnan.utils;

import cn.edu.lingnan.service.QuestionsService;
import cn.edu.lingnan.user.dtos.Result;
import cn.edu.lingnan.user.pojos.AIQuestion;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.IOException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

/**
 * 2.0版本已修改
 */
@Slf4j

public class AIApplicationUtils {

    private final DeepSeekClient client;
    




    // 消息列表
    private JSONArray messages;

    private String initialMessage;

    private static String tips="singleChoiceScore;trialScore;fillScore;expoundScore;answers;totalScore;" ;


    private final static String PRE_MESSAGE = "" +
            "请根据用户的分数数据，给出诊断报告，学习建议，以及学习推荐"+"这是我的得分数据字段："
            + tips+" 这个是题目数据，questionSatisticsVos，题目类型: 1-单选题 2-多选题 3-判断题 4-填空题 5-简答题 ";

    public AIApplicationUtils(String question) {
        this.client = new DeepSeekClient();
        this.messages = new JSONArray();
        initializeMessages(question);
    }

    /**
     * 初始化消息列表。
     */
    private void initializeMessages(String question) {
        this.initialMessage = "分数结果：" + question + "\n" + PRE_MESSAGE;
        addMessage(this.initialMessage);
    }

    /**
     * 添加用户消息到消息列表。
     *
     * @param questionInput 用户输入的内容
     */
    public void addMessage(String questionInput) {
        JSONObject message = new JSONObject();
        message.put("role", "user");
        message.put("content", questionInput);
        this.messages.add(message);
    }

    /**
     * 发送请求并流式输出助手回复。
     *
     * @param callback 流式回调接口
     * @throws IOException 如果请求失败
     */
    public void sendRequest(AIApplicationUtils.StreamingCallback callback) throws IOException {
        this.client.sendRequest(this.messages, false, new DeepSeekClient.StreamingCallback() {
            @Override
            public void onData(String data) {
                callback.onData(data);
            }

            @Override
            public void onComplete(String data) {
                callback.onComplete(data);
            }
        });
    }

    /**
     * 发送请求并同步等待完整的响应数据。
     *
     * @return 完整的响应数据
     * @throws IOException
     * @throws InterruptedException
     * @throws ExecutionException
     */
    public String sendRequestSync() throws IOException, InterruptedException, ExecutionException {
        CompletableFuture<String> future = new CompletableFuture<>();

        sendRequest(new StreamingCallback() {
            @Override
            public void onData(String data) {
                // 可选：处理流式数据
                log.info("数据流：" + data);
            }

            @Override
            public void onComplete(String data) {
                log.info("数据流结束：" + data);
                future.complete(data);
            }
        });

        // 等待并获取结果
        return future.get(); // 可以考虑使用 get(timeout, unit) 来避免无限等待
    }

    /**
     * 流式回调接口。
     */
    public interface StreamingCallback {
        void onData(String data);

        void onComplete(String data);
    }
    
    



}
